// function deepClone(obj, cache = new WeakMap()) {
//   if(typeof obj !== 'object') return obj;
//   if(obj === null) return null;
//   if(cache.get(obj)) return cache.get(obj); // 解决循环引用的问题
//   if(obj instanceof Date) return new Date(obj);
//   if(obj instanceof RegExp) return new RegExp(obj);

//   const cloneObj = obj.constructor();
//   cache.set(obj, cloneObj);
//   for(const key in obj) {
//     cloneObj[key] = deepClone(obj[key], cache);
//   }
//   return cloneObj;
// }

// 测试
const obj = { name: 'Jack', address: { x: 100, y: 200 } }
obj.a = obj // 循环引用
const newObj = deepClone(obj)
console.log(newObj.address === obj.address) // false
console.log(newObj);

function deepClone(obj, cache = new WeakMap()) {
  if() {
  }
}